Tracing is an operation in which a program is executed in such a way that the sequence of statements being executed can be observed. In the event of a crash, hang, bug, glitch or other malfunction in the operation of the program, the trace assists in troubleshooting the malfunction by allowing the programmer to step through the trace information of the program, examine the data and monitor the conditions such as values of variables which occurred immediately prior to the malfunction.
When running an operation that pushes a processor of a computer to the limits of its maximum performance, e.g., video timeline playback, the memory overhead of traces can adversely affect such high performance operation. In addition, after a malfunction, attaching a debugger or troubleshooter to the process indicates the state of the process at the time of the problem. In non-simplistic cases, the cause of the malfunction frequently occurs prior to the malfunction and the information is lost or unavailable by the time a debugger or troubleshooter is attached. Also, on client machines, debuggers and/or troubleshooters are usually not part of the system of the client machine and clients do not want others installing other applications such as debuggers or troubleshooters on their machine. On the other hand, storing trace data ensures that the data will be available for analysis in the event of a malfunction.
Some prior systems maintain trace information. However, these systems lack an efficient way of minimizing the size of the memory needed for the trace information and lack an efficient way of processing the trace information so that it does not bog down the system processing.
Accordingly, a system for storing trace information of an application being run by a process without adversely affecting high performance operation of the processor and without requiring substantial memory is desired to address one or more of these and other disadvantages.